#ifndef _BEHAVIOURCOMPONENT_H
#define _BEHAVIOURCOMPONENT_H

#include <string>

#include "Component.h"

#ifdef GALLIUMENGINE_DLL 
#define GALLIUMENGINE_API __declspec( dllexport )
#else
#define GALLIUMENGINE_API __declspec( dllimport )
#endif

namespace GalliumEngine
{

	class BehaviourComponent : public Component
	{
	private:
		bool m_updateable;
		bool m_renderable;
	public:

		/// <summary>Create a new BehaviourComponent.</summary>
		GALLIUMENGINE_API BehaviourComponent(void);

		/// <summary>Destroy the BehaviourComponent.
		GALLIUMENGINE_API ~BehaviourComponent(void);

		/// <summary>Sets whether the BehaviourComponent is updateable.</summary>
		/// <param type="bool" name="value">The id to set.</param>
		GALLIUMENGINE_API void setUpdateable(bool);

		/// <summary>Gets if the BehaviourComponent is updateable.</summary>
		/// <returns>Whether the BehaviourComponent is updateable.<returns>
		GALLIUMENGINE_API bool getUpdateable();

		/// <summary>Sets whether the BehaviourComponent is renderable.</summary>
		/// <param type="bool" name="value">The id to set.</param>
		GALLIUMENGINE_API void setRenderable(bool);

		/// <summary>Gets if the BehaviourComponent is renderable.</summary>
		/// <returns>Whether the BehaviourComponent is renderable.<returns>
		GALLIUMENGINE_API bool getRenderable();

		/// <summary>Initialize the BehaviourComponent.</summary>
		GALLIUMENGINE_API virtual void initialize();

		/// <summary>Initialize the BehaviourComponent.</summary>
		GALLIUMENGINE_API virtual void deinitialize();
		
		/// <summary>Updates the BehaviourComponent.</summary>
		GALLIUMENGINE_API virtual void update(float);

		/// <summary>Renders the BehaviourComponent.</summary>
		GALLIUMENGINE_API virtual void render();
	};

}

#endif

